package com.yl.nettylearning.netty.day10;

import io.netty.buffer.ByteBuf;
import io.netty.channel.ChannelHandlerContext;
import io.netty.handler.codec.ByteToMessageDecoder;

import java.util.List;

/**
 * @author yangl
 */
public class ByteToLongDecoder extends ByteToMessageDecoder {

    /**
     *  decode 会根据接收到的数据，重复调用，直到确定没有新的元素被添加到 list
     *  或者是byteBuf没有更多的可读字节为止
     *  如果List不为空，就会将 list的内容传递给下一个channelInboundHandler处理
     *  channelInboundHandler处理器中的方法也会被调用多次
     * @param ctx
     * @param in 入站的byteBuf
     * @param out list集合将解码后的数据传给下一个handler
     * @throws Exception
     */
    @Override
    protected void decode(ChannelHandlerContext ctx, ByteBuf in, List<Object> out) throws Exception {
        if(in.readableBytes() >= 8){
            out.add(in.readLong());
        }
    }
}
